package com.wsg.dep.util.office;

import com.itextpdf.text.BaseColor;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.pdf.BaseFont;

import java.io.IOException;

public class FontUtils {
    // 字体文件路径（需将字体文件放入resources/fonts目录）
    private static final String FONT_PATH = "/fonts/STSong-Light.ttf";
    
    /**
     * 获取跨平台中文字体
     * @param fontSize 字号
     * @param vertical 是否垂直排版
     * @param isBold 是否加粗
     * @param color 字体颜色（使用BaseColor）
     * @return 配置好的Font对象
     */
    public static Font getChineseFont(int fontSize, boolean vertical, boolean isBold, BaseColor color) {
        BaseFont baseFont = null;
        int fontStyle = isBold ? Font.BOLD : Font.NORMAL;
        
        try {
            // 从资源文件加载字体（确保字体文件在classpath中）
            baseFont = BaseFont.createFont(
                FONT_PATH,
                getEncoding(vertical),
                BaseFont.EMBEDDED  // 强制嵌入字体确保跨平台显示
            );
        } catch (DocumentException | IOException e) {
            handleFontError(e);
            return getFallbackFont(fontSize, fontStyle, color);
        }
        
        Font font = new Font(baseFont, fontSize, fontStyle, color);
        font.setColor(color);
        return font;
    }

    private static String getEncoding(boolean vertical) {
        // 修正编码标识符的拼写
        return vertical ? "UniGB-UCS2-V" : "UniGB-UCS2-H";
    }

    private static void handleFontError(Exception e) {
//        System.err.println("字体加载失败，请检查以下内容：");
//        System.err.println("1. 字体文件是否存在于: " + FONT_PATH);
//        System.err.println("2. 字体文件是否可读");
//        e.printStackTrace();
    }

    /**
     * 字体库可在linux环境上使用fc-list找到对应想要的字体后更改
     * @param fontSize
     * @param fontStyle
     * @param color
     * @return
     */
    private static Font getFallbackFont(int fontSize, int fontStyle, BaseColor color) {
        String os = System.getProperty ("os.name").toLowerCase ();
//        System.err.println("使用备用字体：" + os);
        String fontName = "STSong-Light";
        if (os.contains ("win")) {
            // 使用系统默认中文字体（Windows 推荐）
            fontName = "C:/Windows/Fonts/simsun.ttc,0"; // Windows 宋体
        } else if (os.contains ("linux")) {
            fontName = "WenQuanYiMicroHei.ttf"; // Linux 文泉驿微米黑
        }
        try {
            return new Font(
                BaseFont.createFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED),
                fontSize,
                fontStyle,
                color
            );
        } catch (Exception e) {
            throw new RuntimeException("无法创建备用字体", e);
        }
    }
}